// 日期
export function formatDate(date, fmt) {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      let str = o[k] + '';
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padleftzero(str));
    }
  }
  return fmt;
};

function padleftzero(str) {
  return ('00' + str).substr(str.length);
}

// 上传文件
export function upFileHttp(option) {
  // 过滤请求成功后的响应对象
  function getBody (xhr) {
    var text = xhr.responseText || xhr.response
    if (!text) {
      return text
    }

    try {
      return JSON.parse(text)
    } catch (err) {
      return text
    }
  }

  var xhr = new XMLHttpRequest();

  // 自定义 beforeSend 函数
  if(option.beforeSend instanceof Function) {
    if (option.beforeSend(xhr) === false) {
      return false
    }
  }

  xhr.onreadystatechange = function () {
    if (xhr.status === 200) {
      if (xhr.readyState === 4) {
        // 成功回调
        option.onSuccess(getBody(xhr))
      }
    }
  }

  // 请求失败
  xhr.onerror = function (err) {
    option.onError(err)
  }

  xhr.open(option.type, option.url, true)

  // 当请求为上传文件时回调上传进度
  if (xhr.upload) {
    xhr.upload.onprogress = function (event) {
      if (event.total > 0) {
        event.percent = event.loaded / event.total * 100;
      }
      // 监控上传进度回调
      if (option.onProgress instanceof Function) {
        option.onProgress(event)
      }
    }
  }

  // 自定义头部
  const headers = option.headers || {}

  for (var item in headers) {
    xhr.setRequestHeader(item, headers[item])
    console.log(item, headers[item]);
  }

  xhr.send(option.data)
}
